package com.linbei.linbei_movie.controller;

import com.linbei.linbei_movie.pojo.Movie;
import com.linbei.linbei_movie.pojo.Result;
import com.linbei.linbei_movie.service.MovieService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/movie")
@Validated
public class MovieController {

    @Autowired
    private MovieService movieService;

    /**
     * 获取所有电影信息
     * @return 包含所有电影信息的列表
     */
    @GetMapping
    public Result<List<Movie>> getAllMovies() {
        List<Movie> movies = movieService.getAllMovies();
        return Result.success(movies);
    }

    /**
     * 根据电影 ID 获取电影信息
     * @param movieId 电影的唯一标识
     * @return 对应的电影信息
     */
    @GetMapping("/{movieId}")
    public Result<Movie> getMovieById(@PathVariable Long movieId) {
        Movie movie = movieService.getMovieById(movieId);
        if (movie != null) {
            return Result.success(movie);
        } else {
            return Result.error("电影不存在");
        }
    }

    /**
     * 创建新的电影信息
     * @param movie 包含电影信息的实体对象
     * @return 创建成功后的电影信息
     */
    @PostMapping
    public Result<Movie> createMovie(@RequestBody Movie movie) {
        Movie createdMovie = movieService.createMovie(movie);
        return Result.success(createdMovie);
    }

    /**
     * 根据电影 ID 更新电影信息
     * @param movieId 电影的唯一标识
     * @param movie 包含更新后电影信息的实体对象
     * @return 更新成功后的电影信息
     */
    @PutMapping("/{movieId}")
    public Result<Movie> updateMovie(@PathVariable Long movieId, @RequestBody Movie movie) {
        Movie updatedMovie = movieService.updateMovie(movieId, movie);
        if (updatedMovie != null) {
            return Result.success(updatedMovie);
        } else {
            return Result.error("电影不存在");
        }
    }

    /**
     * 根据电影 ID 删除电影信息
     * @param movieId 电影的唯一标识
     * @return 删除操作的状态
     */
    @DeleteMapping("/{movieId}")
    public Result<Void> deleteMovie(@PathVariable Long movieId) {
        boolean isDeleted = movieService.deleteMovie(movieId);
        if (isDeleted) {
            return Result.success();
        } else {
            return Result.error("电影不存在");
        }
    }
}